iT邦幫忙

2024 iThome 鐵人賽

DAY 16
0

Day16 索引1

索引跟B+Tree是不同的東西,但是設計上也是有關聯,接下來就用我目前的理解方式來組織一下索引

主鍵索引,輔助索引

主鍵索引又稱聚簇索引(clustered index),就是PK在使用的索引。一張表一定會有這個索引,過程如下:當創建一張表的時候,如果我們沒有設定PK,MySQL就會找沒有重複資料的欄位將他設為PK,如果還是沒有這種欄位,就會做一個隱藏欄位幫我們的表維護一個主鍵索引。

輔助索引又稱二級索引或非聚簇索引

  • 唯一索引:一張表可以多個唯一索引,值必須唯一,允許空值。
  • 普通索引:欄位內的值不必是唯一
  • 前綴索引:針對字符類型的欄位,可以將前幾個字符建立索引,可使用在char、 varchar、binary、varbinary的類型上。

主鍵索引跟輔助索引在儲存上有一個最大的區別:
主鍵索引的葉子節點,會儲存完整的資料,而輔助索引的葉子節點是儲存主鍵,所以在查輔助索引查到資料後,會再繼續查主鍵索引的樹。

聯合索引

聯合索引有兩種

  1. 聯合主鍵索引:聯合主鍵索引不能重複,

  2. 聯合索引:可以重複,主要作為查詢加速之用。

全文索引(Full Text Index)

全文索引是用在在資料內做全文搜尋加速使用,全文索引使用一種倒排索引的技術(Inverted Index),可以用很好的效率在文本中配對字段。
以下對table下全文索引

CREATE TABLE articles (
    id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
    title VARCHAR(200),
    body TEXT,
    FULLTEXT (title, body)  -- 在 `title` 和 `body` 欄位上創建全文索引
) ENGINE=InnoDB;

以下使用 Match Against 關鍵字做全文索引搜尋

SELECT * FROM articles
WHERE MATCH(title, body) AGAINST('database systems');

全文索引適合大量文本的字段搜尋,小文本不太適合使用這種索引

Hash索引

自適應Hash索引,Hash索引的特色就是等值查詢或in查詢好用,無法範圍查找,所以不能作為主要的索引來使用,在MySQL裡,對於頻繁被查詢的表,會自動生成自適應Hash索引(Adaptive Hash index, AHI),Hash查詢O(1)的特性,用在等值查詢或者是in語法可以加速查詢。


上一篇
Day15 為什麼使用 B+Tree 當作儲存結構
下一篇
Day17 聯合索引1
系列文
我獨自升級之資料庫從入門到中階20
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言